package com.wang.study.controller;

import com.wang.study.commons.CommonsUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;

@WebServlet("/uploadGood")
public class uploadGoodController extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //isMultipartContent(req)用于判断请求中是否存在文件上传操作，如果是，返回true
        boolean multipartContent = ServletFileUpload.isMultipartContent(req);

        try {
            if (multipartContent) {//是文件上传
                //创建ServletFileUpload对象
                ServletFileUpload fileUpload = new ServletFileUpload(new DiskFileItemFactory());
                //准备解析请求
                List<FileItem> fileItems = fileUpload.parseRequest(req);
                //遍历fileItems集合，判断fileItem是否是文件域的内容
                for (FileItem fileItem : fileItems) {
                    if (fileItem.isFormField()) {//普通表单字段
                        //fileItem.getFieldName()用于获取表单控件的name属性值
                        //fileItem.getString("utf-8")用于获取表单控件的value值
                        System.out.println(fileItem.getFieldName()+":"+fileItem.getString("utf-8"));
                    }else{//文件域字段，应该进行上传操作。
                        //上传的文件应该存放在哪里？    本地文件系统   tomcat   专门的文件服务器中
                        String path = this.getServletContext().getRealPath("/user/images");
                        File file = new File(path);
                        if (!file.exists()) {
                            file.mkdirs();
                        }

                        //上传的文件保存的文件名要不要做到唯一？
                        String originFileName = fileItem.getName();
                        String fileType = originFileName.substring(originFileName.lastIndexOf("."));

                        String saveFileName = CommonsUtils.getRandomString(128)+fileType;

                        //创建要保存的文件对象
                        File saveFile = new File(file, saveFileName);

                        //将上传文件的名字保存到session中，便于后面引用
                        req.getSession().setAttribute("imagePath",saveFile.getName());

                        //将fileItem中的文件内容写入到文件中。
                        fileItem.write(saveFile);

                        //删除由于文件过大，在上传过程中产生的临时文件
                        fileItem.delete();

                    }
                }

            }else{//不是文件上传

            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        resp.sendRedirect("/admin/goodsManage.jsp");
    }
}
